#pragma once

#include "hzpch.h"
#include "Event.h"
#include "Core.h"
namespace Hazel
{

    // 窗口属性结构体
    struct WindowProps
    {
        std::string Title;
        uint32_t Width;
        uint32_t Height;

        WindowProps(const std::string &title = "Hazel Engine",
                    uint32_t width = 1280,
                    uint32_t height = 720)
            : Title(title), Width(width), Height(height)
        {
        }
    };

    // 窗口接口
    class Window
    {
    public:
        using EventCallbackFn = std::function<void(Event &)>;
        virtual ~Window() = default;

        virtual void OnUpdate() = 0;
        virtual uint32_t GetWidth() const = 0;
        virtual uint32_t GetHeight() const = 0;

        // 窗口属性
        virtual void SetEventCallback(const EventCallbackFn &callback) = 0;
        virtual void SetVSync(bool enabled) = 0;
        virtual bool IsVSync() const = 0;

        virtual void *GetNativeWindow() const = 0;
        static Scope<Window> Create(const WindowProps &props = WindowProps());

        // 添加ImGui相关函数
        virtual void InitImGui() = 0;
        virtual void BeginImGuiFrame() = 0;
        virtual void EndImGuiFrame() = 0;
        virtual void ShutdownImGui() = 0;
    };

}